package com.qx.chat.system.dao;

import java.util.List;

import org.springframework.data.domain.Sort.Order;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Update;


/**
 * TODO
 * @author cyf
 * @version TODO
 */
public interface AbstractRepository<T> {
	
	/**
	 * 
	 *<b>function:</b>添加对象
	 * @author cyf
	 * @createDate 2015-12-12 11:41:30
	 */
	public void insert(T obj); 

	/**
	 * 
	 *<b>function:</b>根据指定id查找对象
	 * @author cyf
	 * @createDate 2015-12-12 11:41:41
	 */
    public T findById(String id);   
	/**
	 * 
	 *<b>function:</b>根据指定key查找对象
	 * @author cyf
	 * @createDate 2015-12-12 11:41:41
	 */
    public T findOne(String key,String value);   
	/**
	 * 
	 *<b>function:</b>根据指定key集合查找对象
	 * @author cyf
	 * @createDate 2015-12-12 11:41:41
	 */
    public T findOne(String[] key,String[] value); 
	/**
	 * 
	 *<b>function:</b>根据指定key查找对象
	 * @author cyf
	 * @createDate 2015-12-12 11:41:41
	 */
    public List<T> findList(String key,String value);   
	/**
	 * 
	 *<b>function:</b>根据指定key集合查找对象
	 * @author cyf
	 * @createDate 2015-12-12 11:41:41
	 */
    public List<T> findList(String[] key,String[] value);   
    /**
     * 
     *<b>function:</b>查询所有
     * @author cyf
     * @createDate 2015-12-12 16:26:06
     */
    public List<T> findAll();   
    
    public List<T> findByRegex(String regex);
    /**
     * 
     *<b>function:</b>删除指定的ID对象
     * @author cyf
     * @createDate 2015-12-12 16:26:16
     */
    public void removeById(String id);   
    /**
     * 
     *<b>function:</b>删除指定的属性对象
     * @author cyf
     * @createDate 2015-12-12 16:26:16
     */
    public void removeByKey(String key,String value);   
    /**
     * 
     *<b>function:</b>删除所有
     * @author cyf
     * @createDate 2015-12-12 16:25:40
     */
    public void removeAll();   
    /**
     * 通过ID找到并修改
     *<b>function:</b>
     * @author cyf
     * @createDate 2015-12-12 16:25:51
     */
    public void findAndModify(String id,Update update);   
    /**
     * 通过指定字段找到并修改
     *<b>function:</b>
     * @author cyf
     * @createDate 2015-12-12 16:25:51
     */
    public void findAndModify(String key,String value,Update update);   
    /**
	 * 
	 * @Title: findListByPage @Description: 根据查询条件直接查询 @param c @param
	 * orders @param pageIndex @param pageSize @return List<E> @throws
	 */
	public List<T> findListByPage(Criteria c, List<Order> orders, int pageIndex, int pageSize);
    /**
	 * 
	 * @Title: findListByPage @Description: 根据查询条件直接查询 @param c @param
	 * orders  @return List<E> @throws
	 */
	public List<T> findList(Criteria c, List<Order> orders);


	public MongoTemplate getMongoTemplate();
}
